package com.yunxin.admin.system.application;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunxin.admin.system.application.command.UserMerchantPageCommand;
import com.yunxin.admin.system.application.command.UserPageCommand;
import com.yunxin.admin.system.application.dto.*;
import com.yunxin.admin.system.infra.persistence.entity.SysRoleDO;
import com.yunxin.admin.system.infra.persistence.entity.SysUserDO;
import com.yunxin.admin.system.infra.persistence.entity.query.result.UserAuthInfoResult;
import com.yunxin.admin.system.infra.persistence.entity.query.result.UserMerchantInfoResult;
import com.yunxin.core.admin.domain.AdminUser;

import java.util.List;

/**
 * @author zero°
 * @since 2023-07-11
 */
public interface UserQueryService {

    /**
     * 用户分页列表
     * @param command command
     * @return Page<UserPageDTO>
     */
    Page<UserPageDTO> getUserPage(UserPageCommand command);

    /**
     * 用户商户分页列表
     * @param command command
     * @return Page<UserMerchantPageDTO>
     */
    Page<UserMerchantInfoResult> getUserMerchantPage(UserMerchantPageCommand command);

    /**
     * 获取用户表单数据
     *
     * @param userId userId
     * @return UserInfoResult
     */
    AdminUser getUserInfoById(Long userId);

    UserOwnDetailDTO getOwnUserById(Long userId);

    UserDetailDTO getUserInfoByIdAndTeamId(Long userId);

    /**
     * 根据查询条件及查询类型获取用户认证信息
     *
     * @param queryValue queryValue
     * @param queryType queryType 1-用户名 2-手机号
     * @return {@link UserAuthInfoResult}
     */

    UserAuthInfoResult getUserAuthInfo(String queryValue, Integer queryType);


    /**
     * 获取导出用户列表
     *
     * @param command command
     * @return List<UserExportDTO>
     */
    List<UserExportDTO> listExportUsers(UserPageCommand command);


    /**
     * 获取登录用户信息
     *
     * @return UserInfoDTO
     */
    UserInfoDTO getUserLoginInfo();

    /**
     * 获取用户商户id集合
     * @param userId userId
     * @return 用户商户id集合
     */
    List<Long> getUserMerchantIds(Long userId);

    /**
     * 根据手机号获取用户登录信息
     * @param phone phone
     * @return Long
     */
    Long getUserLoginInfoByPhone(String phone);


    /**
     * 根据手机号获取用户登录信息
     * @param phone phone
     * @return Long
     */
    SysUserDO selectUserInfoByPhone(String phone);

    /**
     * 查询当前商户下的用户集合(只查询开启状态)
     * @param userId
     * @return
     */
    List<Long> getMerchantUserIds(Long userId);

    /**
     * 查询用户角色
     * @param userId
     * @return
     */
    List<SysRoleDO> getUserRoleId(Long userId);
}
